package ipfind;

public class IpUtil {
    /**
     * 将IPv4地址字符串转换为长整型
     * IP地址的每个部分(0-255)占用8位
     * 转换后的long值布局：
     * 第1部分(左起)：最高8位(bits 24-31)
     * 第2部分：次高8位(bits 16-23)
     * 第3部分：次低8位(bits 8-15)
     * 第4部分：最低8位(bits 0-7)
     */
    public static long ipToLong(String ipAddress) {
        String[] ipParts = ipAddress.split("\\.");
        long result = 0;
        for (int i = 0; i < 4; i++) {
            result |= Long.parseLong(ipParts[i]) << (24 - (8 * i));
        }
        return result;
    }

    /**
     * 将长整型转换为IPv4地址字符串
     */
    public static String longToIp(long ip) {
        return ((ip >> 24) & 0xFF) + "." +
                ((ip >> 16) & 0xFF) + "." +
                ((ip >> 8) & 0xFF) + "." +
                (ip & 0xFF);
    }
}
